package com.uni.bgController;

import com.uni.common.entity.User;
import com.uni.common.util.PageBean;
import com.uni.common.util.ReturnData;
import com.uni.dto.UserDTO;
import com.uni.dto.UserRoleDTO;
import com.uni.service.impl.UserService;
import com.uni.web.shiro.ShiroUtil;
import org.apache.commons.lang3.RandomStringUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.subject.Subject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.List;

//import com.uni.dto.UserPointDTO;
//import com.uni.dto.UserRoleDTO;

/**
*	@author yanzheng_Yu
*	@date 2019年1月20日
*/
@RestController
@RequestMapping("user")
public class UserbgController {
	
	@Autowired
	private UserService userService;

	@PostMapping("login")
	public ReturnData login(UserDTO userDTO) {
		ReturnData rd = new ReturnData();
		if(StringUtils.isBlank(userDTO.getNickname())) {
			return rd.failBack("用户名密码错误");
		}
		try{
			Subject subject = SecurityUtils.getSubject();
			UsernamePasswordToken token = new UsernamePasswordToken(userDTO.getNickname(), userDTO.getPassword());
			subject.login(token);
		}catch (UnknownAccountException e) {
			return rd.failBack(e.getMessage());
		}catch (IncorrectCredentialsException e) {
			return rd.failBack("账号或密码不正确");
		}catch (LockedAccountException e) {
			return rd.failBack("账号已被锁定,请联系管理员");
		}catch (AuthenticationException e) {
			return rd.failBack("账户验证失败");
		}
		return rd.okBack();
	}
	
	
	@RequestMapping("findList")
	public ReturnData findList(PageBean<UserDTO> pageBean,String nickname,String phone) {
		HashMap<String, Object> param = new HashMap<String, Object>();
		if(StringUtils.isNotBlank(nickname)) {
			param.put("nickname", nickname);
		}
		if (StringUtils.isNotBlank(phone))
		{
			param.put("phone", phone);
		}
		pageBean.setParam(param);
		List<UserDTO> users = userService.findList(pageBean);
		int count = userService.countList(pageBean);

		pageBean.setContent(users);
		pageBean.setTotalCount(count);
		return new ReturnData().okBack(pageBean);
	}



//	@PostMapping("findListm")
//	public ReturnData findListByUserId(Long userId){
//		if (userId==null){
//			return new ReturnData().failBack("电话号码为空");
//		}
//		return userService.findByIdm(userId);
//	}
	
//	@PostMapping("updateUserRole")
//	public ReturnData updateUserRole(UserRoleDTO userRoleDTO){
//		System.out.println(userRoleDTO);
//		return userService.updateUserRole(userRoleDTO);
//	}
//
//	@GetMapping("logout")
//	public ReturnData logout() {
//		Subject subject = SecurityUtils.getSubject();
//		subject.logout();
//		return new ReturnData().okBack();
//	}
	
	@PostMapping("updateUserStatus")
	public ReturnData updateUserStatus(String userIdList){
		if (StringUtils.isNotBlank(userIdList)){
			String[] userIdArray = userIdList.split(",");
			int count = userService.updateUserStatus(userIdArray);
			if(count > 0) {
				return new ReturnData().okBack();
			}
		} 
		return new ReturnData().failBack("没有选中需要删除的信息！");
	}

	@PostMapping("add")
	public ReturnData add(User user) {
		User u = userService.findByBgLoginName(user.getBgLoginName());
		if(u != null) {
			return new ReturnData().failBack("用户名已存在");
		}
		user.setNickname("");
		user.setOpenid(RandomStringUtils.randomAlphanumeric(20));
		user.setBgSalt(RandomStringUtils.randomAlphanumeric(20));
		user.setBgPassword(ShiroUtil.sha256(user.getBgPassword(),user.getBgSalt()));
		int count = userService.insert(user);
		if(count > 0) {
			return new ReturnData().okBack();
		}
		return new ReturnData().failBack("添加失败");
	}

//	@PostMapping("updatePassword")
//	public ReturnData updatePassword(String oldPassword,String password) {
//		User user = ShiroUtil.getUser();
//		if(! user.getBgPassword().equals(ShiroUtil.sha256(oldPassword,user.getBgSalt()))) {
//			return new ReturnData().failBack("原密码错误");
//		}
//		user.setBgSalt(RandomStringUtils.randomAlphanumeric(20));
//		user.setBgPassword(ShiroUtil.sha256(password,user.getBgSalt()));
//
//		int count = userService.updatePassword(user);
//		if(count > 0) {
//			return new ReturnData().okBack();
//		}
//		return new ReturnData().failBack("修改失败");
//	}
//
//	@RequestMapping("findByRole")
//	public ReturnData findByRole(Integer role) {
//		List<User> users = userService.findByRole(role) ;
//		return new ReturnData().okBack(users);
//	}
//
//	@RequestMapping("findUserPoint")
//	public ReturnData findUserPoint(PageBean<UserPointDTO> pageBean, String nickname, String phone,String pointType){
//		HashMap<String, Object> param = new HashMap<String, Object>();
//		if(StringUtils.isNotBlank(nickname)) {
//			param.put("nickname", nickname);
//		}
//		if (StringUtils.isNotBlank(phone)) {
//			param.put("phone", phone);
//		}
//		if (StringUtils.isNotBlank(pointType)){
//			param.put("pointType",pointType);
//		}
//		pageBean.setParam(param);
//		List<UserPointDTO> users = userService.findUserPointList(pageBean);
//		int count = userService.countUserPointList(pageBean);
//
//		pageBean.setContent(users);
//		pageBean.setTotalCount(count);
//		return new ReturnData().okBack(pageBean);
//	}
//
////	addPointLog
//	@PostMapping("addPointLog")
//	public ReturnData addPointLog(UserPointDTO userPointDTO){
//		User user=userService.findByPhone(userPointDTO.getPhone());
//		if (user==null){
//			return new ReturnData().failBack("没有该用户，请重新填写电话");
//		}
//		if (user.getPoint()<userPointDTO.getPoint()&&userPointDTO.getType()==2){
//			return new ReturnData().failBack("当前用户积分不足");
//		}
//		userPointDTO.setCurrentPoint(user.getPoint());
//		userPointDTO.setUserId(user.getId());
////		System.out.println(userPointDTO);
//		return userService.addUserPoint(userPointDTO);
//	}
//
//	@PostMapping("findStatisticsData")
//	public ReturnData statisticsData(){
//		User user=ShiroUtil.getUser();
//		System.out.println(user);
//		return userService.statisticsData(user);
//	}
//	@PostMapping("findRecentMonth")
//	public ReturnData recentMonth(){
//		User user=ShiroUtil.getUser();
//		System.out.println(user);
//		return userService.recentMonth(user);
//	}


}
